home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
hypertxt.arj
/
9301
/
HERC1.CD
< prev
next >
Wrap
Text File
|
1995-04-18
|
13KB
|
219 lines
@VGrafikus konvertálások -- 1.@N
@VMonokróm üzemmód@N
Melyik Hercules-tulajdonos nem irigyelte még meg a
színpompás VGA képeket? Van-e olyan VGA-t használó
sorstársunk, aki ne sóhajtana fel egy jól sikerült,
nagyfelbontású 16 színû EGA kép láttán: ""De jó is lenne
ez 256 színben!" Egyáltalán, van-e olyan PC-tulajdonos, aki
elégedett grafikus megjelenítôjének közvetlen
lehetôségeivel?
Aligha. Az egyes üzemmódokban megjelenített képek többnyire
letörlésükig az eredeti grafikus rendszeren maradnak,
hacsak valami vírus át nem formázza ôket valami mássá.
Persze az effajta konvertálás leginkább Murphy ide
vonatkozó törvényét erôsíti: a törlés az egyetlen olyan
""konverzió", ami garantáltan mûködik.
Sorozatunkban olyan ismereteket igyekszünk közzéadni,
amelyek segítségével bármely grafikus üzemmódból
átkonvertálhatunk tetszôleges képeket akármelyik
megjelenítô számára, méghozzá profi minôségben. Lehetséges
például egy monokróm (egyszínû) képbôl 64 szürkeárnyalattal
rendelkezô VGA képet felépíteni, a 16 színû EGA képekbôl
pedig igazi, 256 színû képeket készíteni.
Hogy az alapoktól kezdjük, és hogy a késôbbiekben érthetôek
legyenek a bonyolultabb, jóval összetettebb színes
konvertálások, a fekete-fehér üzemmódokkal érdemes elôször
foglalkoznunk. A legfontosabb a Hercules monokróm
megjelenítô, hiszen ez az egyetlen olyan grafikus rendszer,
amely csak e két szín megjelenítésére képes. Ide tartozik
még a CGA, az EGA és a VGA megjelenítôk monokróm üzemmódja
is, de ezeket elég ritkán használják, mivel majdnem
mindenki automatikusan a színes üzemmódokat részesíti
elônyben. Természetesen az itt leírtak éppen úgy igazak
ezekre az üzemmódokra is, akár a Hercules adapterre.
Minden grafikus konvertálás alapvetôen három részbôl áll:
1. Az eredeti képinformáció felhasználásával a köztes
információ leképzése.
2. A célüzemmód felkészítése a köztes információ
megjelenítésére.
3. A köztes információ egyszerû vagy összetett raszterré
alakítása és megjelenítése a célüzemmódban.
E három fô lépés közül a monokróm adapterre csak az elsô és
a harmadik vonatkozik. A köztes fázis -- mivel nem
válogathatunk a színek között -- kihagyható. Annál több
lehetôségünk marad ezáltal a másik két részfeladattal
foglalkozni, ezek közül is legelôször a köztes információ
leképezésével.
Ez a köztes információ voltaképpen a kép feldolgozott
pixeladatainak a tárolása. Rendkívül fontos az ilyesfajta
(átviteli) file formátuma, hiszen ezáltal biztosított a
kapcsolat két egymástól teljesen eltérô grafikus rendszer
információhalmaza között. Mind a felbontásnak, mind pedig
a színhûségnek itt kell a legnagyobbnak lennie, hogy aztán
a lehetô legszebben konvertálhassuk a képet egy gyengébb
megjelenítô számára.
Ez maga után vonja, hogy mindenképpen TrueColor (valódi
színû) színábrázolást kell alkalmaznunk -- a különbözô
scannerek, képdigitalizálók által készített file-ok is
nagyrészt (érthetôen) ilyenek, ezért azokból szintén
elvégezhetjük a leképezést.
Minden egyes pontban meghatározzuk az additív színkeverés
három alapszínének -- a vörös, a zöld és a kék -- arányát.
Legcélszerûbb, ha mindhárom színt egy byte (256 egység)
felbontásban írjuk le, így képesek vagyunk 256^3, azaz
mintegy 16,7 millió különbözô szín kezelésére.
Felbontásként minimum akkorát válasszunk, amekkora az
eredeti grafikus üzemmód ábrázolóképessége. A képet
soronként tároljuk, a sorokon belül pedig balról jobbra
haladva minden pontban meghatározzuk a három alapszín
telítettségét.
Monokróm üzemmódban természetesen nem értelmezhetünk
színeket, csak szürkeárnyalatokat. Egy szürke színt a három
alapszín azonos telítettsége határoz meg, a fényesség pedig
a telítettség értékétôl függ. îgy végsô soron a fekete és a
fehér is a szürke egy árnyalata. Az elsôben 0--0--0 az
alapszínek aránya, az utóbbiban pedig 255--255--255. A
""tökéletes" szürke a 127--127--127-es telítettségekkel
írható le, az ennél kisebb értékek a feketébe, a nagyobbak
pedig fehérbe tolják el a szürke színhatást. Látható, hogy
a tárolható szürkeárnyalatok száma 256 -- ez bôven elegendô.
@VA köztes információ leképzése@N
Ha meg akarunk fejteni egy monokróm képet, akkor
""visszafelé" kell gondolkodnunk. Ki kell találnunk, milyen
hatást akart ábrázolni az eredeti képet létrehozó program.
Ezt egyetlen pont vizsgálatával nem tudjuk eldönteni. Ha
csak két színünk van, akkor a kép egy adott felületének
látszólagos fényességét az határozza meg, hogy az adott
felületen lévô pixelek közül hány a fehér színû. Minél több
a fehér pixel adott felületen, annál fényesebb az
összhatás. îgy a @Kfehér pixelek/összes pixelek@N arány
egy olyan 0 és 1 közé esô számot ad, amelynél az 1 a
tökéletes fehéret, a 0 a feketét, a 0,5 pedig a
középszürkét jelenti. Ebbôl következik, hogy ezt azt
arányt még 255-tel fel kell szoroznunk ahhoz, hogy egész
számok formájában az eredményt tárolni tudjuk. A számítás
tehát a következô: @Kfényesség = 255*(fehér pixelek@N
@Kszáma/összes pixelek száma)@N.
Természetesen minél nagyobb felületet tapogatunk le, annál
több lesz a keletkezô szürkeárnyalatok száma. Egy 1*1-es
""felület" 2 fényességértéket vehet fel: az abszolút
feketét (0) és az abszolút fehéret (255). Ha növeljük a
területet, ugrásszerûen nô a szürkeárnyalatok száma.
Ez a növekedés nem lineáris, hanem parabolikus (négyzetes)
jellegû, hiszen a mezô szélhosszának növekedtével
négyzetesen emelkedik a felület ""alternatív" pixeleinek
száma. Ha az oldalhossz @KX@N, akkor a @Kszürkeárnyalatok@N
@Kszáma = X*X+1@N (1. ábra).
@VEgyfázisú letapogatás@N
A köztes információ leképzésének az egyik -- ha nem is a
legjobb -- módja az, ha a képet úgy tapogatjuk le, hogy
sorról sorra, a sorokon belül pedig balról jobbra haladva
minden pixel környezetében leolvasunk egy @KX*X@N képpontos
mezôt, és az ennek alapján kiszámolt értékeket eltároljuk.
Több dolgot kell figyelembe vennünk akkor, amikor az @KX@N
értékét kiválasztjuk. Minél nagyobb ez az érték, annál
finomabb lesz a szürkeskála, azonban -- ahogy ez lenni
szokott -- közben valami drasztikusan romlik. Ez a tényezô
pedig a kép élessége. Minél nagyobb ugyanis az @KX@N
értéke, annál inkább egymásba csúsznak a letapogatott
mezôk, és egyre nagyobb lesz az a terület, amely a két
egymás mellett lévô fizikai pixel körül olvasott mezô
metszeteként értelmezhetô.
Például, ha egy nagyobb fekete és fehér terület határán
dolgozunk, akkor a még fehér területen lévô pixelek
leképzésekor már bôven beleolvasunk a fekete területbe, és
ez fordítva is igaz. Ennek következtében a határhoz
@KX/2@N pixelnél közelebb esô pontok egyre inkább
eltolódnak szürkébe, és a tökéletes szürke árnyalatot a
tényleges, fizikai határt alkotó két pixel átlaga fogja
adni, amelyek egyenként is nagyon közel vannak ehhez.
Minél nagyobb az @KX@N érték, annál nagyobb tehát annak az
esélye, hogy ""téves" átlagképzés történik, ami a keletkezô
összhatást egyre inkább szürkébe tolja el, tehát rontja a
kontrasztot és az élességet.
Minél kisebb felbontású az az üzemmód, amibe a képet át
akarjuk konvertálni, annál tovább növelhetjük
""büntetlenül" az átlagolt mezô területét. Gondoljunk csak
a VGA 320*200-as felbontású alapüzemmódjára. Ez az üzemmód
csak negyedannyi pontot tartalmaz, mint a Hercules
720*348-as felbontású üzemmódja. Tehát ha 2*2-es mezôt
átlagolunk a monokróm képen, az egyáltalán nem okoz
élességcsökkenést a célüzemmód lehetôségeihez képest,
hiszen a négy olvasott pont közvetlenül megfeleltethetô a
VGA egyetlen pixelének. A legmegfelelôbbnek a 4*4-es és az
5*5-ös mezôk tûnnek, mivel itt még nem számottevô a
homályosság mértéke, mégis a szürke 17--26 féle árnyalata
jelenik meg.
@VTöbbfázisú letapogatás@N
Van azonban egy sokkal jobb módja is a köztes információ
leképzésének. Ezt azoknak ajánlhatom, akik a szebb eredmény
érdekében egy kicsit több idôt áldoznak az algoritmus
elkészítésére. Itt egy pixel fényességének leképzése több
fázisban történik, és a kapott értéket különbözô
eljárásokkal még módosítjuk is. Az elsô fázisban ugyanúgy
járunk el, mint az elôzôekben, a fizikai pixel
környezetében egy @KX*X@N-es mezô szürkeátlagát készítjük
el.
Nem ajánlatos azonban túllépnünk a 3*3-as mezônagyságot.
Itt egyébként ez a legoptimálisabb érték. Az eredményt
tároljuk (még nem végleges értékként!), és a leolvasott
mezô körül letapogatunk egy olyan @KY*Y@N elemû területet,
melynek elemei már nem fizikai képelemek, hanem az @KX*X@N
pixel felbontású mezôk (2.ábra). Van tehát @KY*Y@N számú
különbôzô szürkeátlagunk, ezek közül a középsô -- vagyis az
elsôként leolvasott -- kiemelt jelentôsséggel bír.
Ha mind az @KX@N, mind az @KY@N értékét 3-ban határoztuk
meg, akkor összesen (3*3)*(3*3) = 81 képpontot dolgoztunk
fel, 9 pontonként külön kiértékelve. A kapott 9
szürkeárnyalatból úgy képezzük végleges átlagot, hogy csak
azokat számítjuk helyes értéknek, amelyek az eredeti
(középsô) szürkeárnyalattól nem térnek el @KZ%@N-nál
jobban. A @KZ@N értékét 25 körülinek érdemes beállítani,
ekkor -- mivel 255-nek a 25%-a 64 -- csak azok az értékek
számolhatók bele az átlagba, amelyeknek a középsô értéktôl
való eltérése nem nagyobb mint 64. Ha például egy 80-as
szürkeségû terület abszolút feketével határolt szélén
dolgozunk, és a középsô értéket még a szürke területen
képeztük le, akkor a periférikus, 0-ás átlagú mezôket az
algoritmus visszautasítja, és így megtartja az eredeti
élességet. A szürkében elôforduló (90-es, 85-ös stb.)
fényességû területeket viszont elfogadja, ezzel is növelve
a finomságot.
Látható, hogy ez az eljárás egyesíti magában az éles
kontúrok, és a nagyfelbontású szürkeskála nyújtotta
elônyöket, ezáltal még a professzionális igényeket is
kielégíti.
@KNagy Gergely@N